POLL(2) | Руководство программиста Linux | POLL(2) |
НАЗВАНИЕ¶
poll - ожидание разнообразных событий на файловом дескрипторе
КРАТКАЯ СВОДКА¶
#include <sys/poll.h>
int poll(struct pollfd *ufds, unsigned int nfds, int timeout);
ОПИСАНИЕ¶
poll
является
вариацией
на тему select.
Здесь
задается
массив из
nfds структур
типа
struct pollfd {
int fd; /* файловый дескриптор */
short events; /* запрошенные события */
short revents; /* возвращенные события */
};
и timeout в
миллисекундах.
Отрицательное
значение
означает
бесконечный
тайм-аут.
Поле fd
содержит
файловый
дескриптор
открытого
файла. Поле
events-- входной
параметр,
указывающий
битовую
маску
событий,
интересующих
приложение.
Поле revents--
выходной
параметр,
куда ядро
помещает
информацию
о
произошедших
событиях:
запрошенных
или
событий
типа POLLERR, POLLHUP
или POLLNVAL. (Эти
три
битовых
флага не
имеют
смысла при
использовании
в поле events и
будут
установлены
в поле revents,
если
соответствующее
условие
истинно.)
Если ни
одно из
запрошенных
событий
(или ошибок)
не
случилось,
то ядро
ждет их
появления
до
тайм-аута.
Вот
возможные
биты,
описанные
в <sys/poll.h>:
#define POLLIN 0x0001 /* Можно читать данные */
#define POLLPRI 0x0002 /* Есть срочные данные */
#define POLLOUT 0x0004 /* Запись не будет блокирована */
#define POLLERR 0x0008 /* Произошла ошибка */
#define POLLHUP 0x0010 /* "Положили трубку" */
#define POLLNVAL 0x0020 /* Неверный запрос: fd не открыт */
В <asm/poll.h> также определены значения POLLRDNORM, POLLRDBAND, POLLWRNORM, POLLWRBAND и POLLMSG.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ¶
При успешном завершении возвращается положительное значение, равное количеству структур с ненулевыми полями revents (другими словами, дескрипторы с обнаруженными событиями или ошибками). Нуль означает, что системный вызов вышел по тайм-ауту, и ни один из файловых дескрипторов не был выбран. При ошибке возвращается -1, а errno устанавливается в соответствующее значение.
ОШИБКИ¶
СООТВЕТСТВИЕ СТАНДАРТАМ¶
XPG4-UNIX.
ДОСТУПНОСТЬ¶
Системный вызов poll() появился в Linux 2.1.23. Библиотечный вызов poll() появился в libc 5.4.28 (использует эмуляцию с помощью select(2), если в вашем ядре нет системного вызова poll(2).
СМОТРИ ТАКЖЕ¶
ПЕРЕВОД¶
Copyright (C) Alexey Mahotkin <alexm@hsys.msk.ru> 2000
7 декабря 1997 | Linux 2.1.23 |